<?php
/**
 * Desc:
 * User: yangyang
 * Date: 2024/4/8 15:33
 * Ver: 1.0
 */

namespace App\Transformers;

use App\Models\Category;
use App\Models\Good;
use League\Fractal\TransformerAbstract;

class GoodTransformer extends TransformerAbstract
{
    protected $availableIncludes = ['category', 'user', 'comments'];

    public function transform(Good $good)
    {
        $pics_url = [];
        if (!empty($good->pics)) {
            foreach ($good->pics as $pic) {
                array_push($pics_url, qiniu_url($pic));
            }
        }


        return [
            'id'           => $good->id,
            'title'        => $good->title,
            'category_id'  => $good->category_id,
            //'category_name' => Category::find($good->category_id)->name,
            'description'  => $good->description,
            'price'        => $good->price,
            'stock'        => $good->stock,
            'cover'        => $good->cover,
            'pics'         => $good->pics,
            'pics_url'     => $pics_url,
            'details'      => $good->details,
            'is_on'        => $good->is_on,
            'is_recommend' => $good->is_recommend,
            'created_at'   => $good->created_at->toDateTimeString(),
            'updated_at'   => $good->updated_at->toDateTimeString(),
        ];
    }

    /**
     * 将商品分类包含到商品信息中
     * 该方法通过调用item方法，使用CategoryTransformer对商品的分类信息进行转换处理，
     * 从而将分类信息包含到商品信息中。
     * @param Good $good 商品对象，包含商品及其分类等信息。
     * @return mixed 返回经过CategoryTransformer转换后的商品分类信息。
     */
    public function includeCategory(Good $good)
    {
        // 使用CategoryTransformer转换商品的分类信息
        return $this->item($good->category, new CategoryTransformer());
    }

    /*
     * 额外的用户数据
     */
    public function includeUser(Good $good)
    {
        return $this->item($good->user, new UserTransformer());
    }
    /**
     * 包含商品评论的方法
     *
     * 该方法将商品的评论集合进行处理，通过CommentsTransformer转换后，返回一个集合。
     *
     * @param Good $good 商品对象，该商品对象包含需要处理的评论信息。
     * @return mixed 返回通过CommentsTransformer转换后的评论集合。
     */
    public function includeComments(Good $good)
    {
        // 使用CommentsTransformer转换商品的评论数据
        return $this->collection($good->comments, new CommentsTransformer());
    }
}
